GitHub Actions
GitHub Actions Documentation - GitHub Docs
Understanding GitHub Actions - GitHub Docs
Jobは steps のあつまり。同一 Job の step は同じ runner(server) で実行される。step は順番に行われる。
Job 間でデータを共有できる
Defining outputs for jobs - GitHub Docs
run: echo "key_name=world" >> "$GITHUB_OUTPUT" のように stdout に吐き出すと steps.stepname.outputs.key_name とアクセスできるらしい
複数環境にデプロイ
Using environments for deployment - GitHub Docs
job ごとにどの environment を使うかを指定できる
これはできないみたい。どこにも書いてない気がするけど
code:shell
jobs:
call-resuable-workflow:
uses: workflow
environment: production
これが参考になった
reusable workflow が environment 文字列を受け取る
Consuming Environment Secrets in Reusable Workflows | Colin’s ALM Corner
変数
Variables - GitHub Docs
$GITHUB_ENV に設定する
Workflow commands for GitHub Actions - GitHub Docs
env.NAME でアクセス
同一 job のそれ以降の step で参照可能
env に設定する
$NAME でアクセス
式
Expressions - GitHub Docs
Secrets
Encrypted secrets - GitHub Docs
workflow に environment を指定した状態だと、repository secrets が読めないとかある?
動作的にはそんな感じがするが、直感に反するし、ドキュメントにも記載はない
違った。reusable workflow には明示的に secrets を渡す必要があるみたい。あるいは secrets: inherit を指定する
Encrypted secrets - GitHub Docs
差分があったファイルに応じた処理をする
on で path filtering
ファイルが増える可能性あり
専用の actions あり
https://github.com/marketplace/actions/changed-files
Reusable workflow
Reusing workflows - GitHub Docs
Timeouts
Usage limits, billing, and administration - GitHub Docs
設定もできる
Debug
CircleCI だと SSH して CI の環境に入ってデバッグできるのだが、同じようなことはできないのか?
Debug with SSH - CircleCI
機能としてはなさそうだが、方法はあるみたい。安全なのかわからん。
mxschmitt/action-tmate: Debug your GitHub Actions via SSH by using tmate to get access to the runner system itself.
nektos/act: Run your GitHub Actions locally 🚀
ローカルで actions yaml を実行する
workflow ファイルを指定するには -W
job を指定するには -j
working-directory
job step では working-directory を設定できる
Workflow syntax for GitHub Actions - GitHub Docs
Context
Contexts - GitHub Docs
式の中では変数展開みたいな感じでアクセスできる
Access tokens
GITHUB_TOKEN
Automatic token authentication - GitHub Docs
他のリポジトリにはアクセスできなさそう
社内用GitHub Actionsのセキュリティガイドラインを公開します | メルカリエンジニアリング
GitHub Appsトークン解体新書:GitHub ActionsからPATを駆逐する技術
deploy keys という方法もある
Managing deploy keys - GitHub Docs